#make engine for Lasso Modules
OS = $(shell uname)

#darwin only
ARCH = -arch i386 -arch ppc7400 #-arch x86_64
M = -m32
Darwin_CC = g++
Darwin_Linker = g++

Linux_CC = gcc
Linux_Linker = gcc

CC = $($(OS)_CC)
LINKER = $($(OS)_Linker)

Linux_CFLAGS += -Wno-multichar -DMACHINE_LINUX=1
Darwin_CFLAGS += $(ARCH) -mmacosx-version-min=10.5 -isysroot /Developer/SDKs/MacOSX10.5.sdk -F/Library/Frameworks -I/usr/local/include -dynamic -DMACHINE_MACOSX=1 -D_PTHREADS

Linux_LFLAGS += -shared -Wl,-Bsymbolic
Darwin_LFLAGS += $(ARCH) -L/usr/local/lib -flat_namespace -bundle -framework Carbon -F/Library/Frameworks -framework System -framework Lasso$(FRAMEWORK_SUFFIX) # -undefined warning

Linux_LIBS += -lstdc++
Darwin_LIBS += -lstdc++

Linux_LIBSUFFIX = so
Darwin_LIBSUFFIX = dylib

Linux_LN = g++
Darwin_LN = c++

DEBUG += -O3 -DNDEBUG
INCLUDES += -I../../LassoService.8 -I. 
CFLAGS += $(M) $(DEV_DEFINES) -fPIC $(DEBUG) $(CFAT) $($(OS)_CFLAGS) -Wno-deprecated -fshort-wchar
LFLAGS += $(M) $(LFAT) $($(OS)_LFLAGS) 
LIBS += $($(OS)_LIBS)

OBJ_DIR = $(LIB_VARIANT)obj

LIBSUFFIX = $(LIB_VARIANT)$($(OS)_LIBSUFFIX)

LN = $($(OS)_LN)

# psuedo-function for converting a list of source files in SRCS variable
# to a corresponding list of object files in $(OBJ_DIR)/xxx.o
# The "function" strips off the src file suffix (.ccp or .c or whatever)
# and then strips of the directory name, leaving just the root file name.
# It then appends the .o suffix and prepends the $(OBJ_DIR)/ path
define SRCS_LIST_TO_OBJS
	$(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(foreach file, $(SRCS), \
	$(basename $(notdir $(file))))))
endef

OBJS = $(SRCS_LIST_TO_OBJS)
OBJS += $(OBJS_MANUAL)

$(TARGET): $(OBJ_DIR) $(OBJS)
	$(LN) $(LFLAGS) -o $@.$(LIBSUFFIX) $(OBJS) $(LIBS)

all: $(TARGET)

fat:
	$(MAKE) "CFAT = -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk" "LFAT = -mmacosx-version-min=10.4 -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk" "LIB_VARIANT = i386."
	$(MAKE) "CFAT = -arch ppc -isysroot /Developer/SDKs/MacOSX10.3.9.sdk"  "LFAT =  -mmacosx-version-min=10.3.9 -arch ppc -isysroot /Developer/SDKs/MacOSX10.3.9.sdk" "LIB_VARIANT = ppc."
	lipo $(TARGET).ppc.dylib $(TARGET).i386.dylib -create -output $(TARGET).dylib
	- rm $(TARGET).ppc.dylib $(TARGET).i386.dylib
	
debug:
	$(MAKE) "DEBUG = -O0 -g3 -DNDEBUG"

clean:
	- rm -rf *.dylib *.so $(OBJ_DIR)/* > /dev/null 2>&1
	- rm i386.$(OBJ_DIR)/* > /dev/null 2>&1
	- rm ppc.$(OBJ_DIR)/* > /dev/null 2>&1
	
#	rule to create the object file directory if needed
$(OBJ_DIR)::
	@[ -d $(OBJ_DIR) ] || mkdir $(OBJ_DIR) > /dev/null 2>&1
        
$(OBJ_DIR)/%.o : %.c
	@-mkdir `dirname $@` > /dev/null
	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
$(OBJ_DIR)/%.o : %.cpp
	@-mkdir `dirname $@` > /dev/null 2>&1
	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
$(OBJ_DIR)/%.o : %.cp
	@-mkdir `dirname $@`
	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
$(OBJ_DIR)/%.o : %.cc
	@-mkdir `dirname $@`
	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
$(OBJ_DIR)/%.o : %.C
	@-mkdir `dirname $@`
	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
$(OBJ_DIR)/%.o : %.CC
	@-mkdir `dirname $@`
	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
$(OBJ_DIR)/%.o : %.CPP
	@-mkdir `dirname $@`
	$(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
